package com.drug.mingkang.service.impl;

import com.drug.mingkang.mapper.AuditRecordMapper;
import com.drug.mingkang.model.AuditRecord;
import com.drug.mingkang.model.HqDrug;
import com.drug.mingkang.mapper.HqDrugMapper;
import com.drug.mingkang.model.HqDrugtype;
import com.drug.mingkang.model.Specification;
import com.drug.mingkang.model.vo.ExcelDataVO;
import com.drug.mingkang.model.vo.HqDrugVo;
import com.drug.mingkang.permission.model.PerUsers;
import com.drug.mingkang.service.HqDrugService;
import com.drug.mingkang.utils.GiteeImgTools;
import com.drug.mingkang.utils.ResponseMessage;
import com.drug.mingkang.utils.Tools;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.UUID;

/**
 * 药品表(HqDrug)表服务实现类
 *
 * @author wenchangjian
 * @since 2020-08-11 12:00:12
 */
@Service("hqDrugService")
public class HqDrugServiceImpl implements HqDrugService {
    @Resource
    private HqDrugMapper hqDrugMapper;

    @Resource
    private SpecificationServiceImpl specificationService;


    /**
     * 审核表
     */
    @Resource
    private AuditRecordMapper auditRecordMapper;

    /**
     * 通过ID查询单条数据
     *
     * @param drugId 主键
     * @return 实例对象
     */
    @Override
    public HqDrug queryById(String drugId) {
        return this.hqDrugMapper.queryById(drugId);
    }



    @Override
    public List<HqDrug> findDrugWarning(HqDrug hqDrug) {
        return this.hqDrugMapper.findDrugWarning(hqDrug);
    }

    @Override
    public int findDrugWarningCount(HqDrug hqDrug) {
        return this.hqDrugMapper.findDrugWarningCount(hqDrug);
    }

    /**
     * 查询行数
     * @return 返回行数
     */
    @Override
    public int selectCount(HqDrug hqDrug) {
        return this.hqDrugMapper.selectCount(hqDrug);
    }

    @Override
    public List<HqDrug> findEvery(HqDrug hqDrug) {
        return this.hqDrugMapper.findEvery(hqDrug);
    }

    @Override
    public int findEveryCount(HqDrug hqDrug) {
        return this.hqDrugMapper.findEveryCount(hqDrug);
    }

    @Override
    public int findEveryCounts(HqDrug hqDrug, String companyId) {
        return this.hqDrugMapper.findEveryCounts(hqDrug,companyId);
    }

    @Override
    public List<HqDrug> findEverys(HqDrug hqDrug,String companyId) {
        return this.hqDrugMapper.findEverys(hqDrug, companyId);
    }

    /**
     * 查询多条数据
     *
     * @param page 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    @Override
    public List<HqDrug> queryAllByLimit(int page, int limit) {
        return this.hqDrugMapper.queryAllByLimit((page-1)*limit, limit);
    }

    /**
     * 关联类型查询指定行数据
     *
     * @return 对象列表
     */
    @Override
    public List<HqDrug> queryAllByType(HqDrug hqDrug) {
        return this.hqDrugMapper.queryAllByType(hqDrug);
    }

    /**
     * 根据类型名称批量查询类型id
     * @param list
     * @return
     */
    @Override
    public List<HqDrugtype> getItermByList(List<String> list) {
        return this.hqDrugMapper.getItermByList(list);
    }

    /**
     * 新增数据
     *
     * @param hqDrug 实例对象
     * @param file 图片
     * @param specification 说明书
     * @return 实例对象
     */
    @Override
    public HqDrug insert(HqDrug hqDrug, MultipartFile file,Specification specification) {
        GiteeImgTools giteeImgTools = new GiteeImgTools();
        String saveImg = "";
        try {
            //调用方法将图片存入云中 返回地址
            saveImg = giteeImgTools.saveImg(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("图片地址"+saveImg);
        //定义图片地址
        hqDrug.setImages(saveImg);
        //为无效
        hqDrug.setIsva(10);
        //增加药品
        this.hqDrugMapper.insert(hqDrug);
        //药品id给说明书类
        specification.setDrugId(hqDrug.getDrugId());
        //增加说明书
        this.specificationService.insert(specification);
        return hqDrug;
    }

    /**
     * 批量增加
     * @param list
     * @return
     */
    @Override
    public int insertBatch(List<ExcelDataVO> list) {
        return this.hqDrugMapper.insertBatch(list);
    }

    /**
     * 修改数据
     *
     * @param hqDrug 实例对象
     * @param file 图片
     * @return 实例对象
     */
    @Override
    public HqDrug update(HqDrug hqDrug, MultipartFile file) {
        if (file!=null && !"".equals(file)){
            GiteeImgTools giteeImgTools = new GiteeImgTools();
            String saveImg = "";
            try {
                saveImg = giteeImgTools.saveImg(file);
            } catch (Exception e) {
                e.printStackTrace();
            }
            hqDrug.setImages(saveImg);
        }
        this.hqDrugMapper.update(hqDrug);
        return this.queryById(hqDrug.getDrugId());
    }

    /**
     * 通过主键删除数据
     *
     * @param drugId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(String drugId) {
        return this.hqDrugMapper.deleteById(drugId) > 0;
    }

    /**
     * 查询多条药品类型数据
     *
     * @return 对象列表
     */
    @Override
    public List<HqDrugtype> selectByType() {
        return this.hqDrugMapper.selectByType();
    }

    /**
     * 根据药品id查询说明书
     * @param id 药品id
     * @return 实例对象
     */
    @Override
    public Specification queryBySpe(String id){
        return this.specificationService.queryByDrugId(id);
    }

    /**
     * 修改说明书
     * @param specification
     * @return
     */
    @Override
    public Specification updateSep(Specification specification){
        return this.specificationService.update(specification);
    }


    /**
     * 通过实体作为筛选条件查询
     * @param hqDrugVo
     * @return
     */
    @Override
    public List<HqDrug> fqueryAll(HqDrugVo hqDrugVo) {
        return this.hqDrugMapper.fqueryAll(hqDrugVo);
    }

    /**
     * 查询行数
     * @param hqDrugVo
     * @return
     */
    @Override
    public int fcount(HqDrugVo hqDrugVo) {
        return this.hqDrugMapper.fcount(hqDrugVo);
    }

    /**
     * 修改审核状态
     * @param drugId
     * @return
     */
    @Override
    public int fupdate(String drugId) {
        return this.hqDrugMapper.fupdate(drugId);
    }

    @Override
    public ResponseMessage updateIsva(HqDrug hqDrug, AuditRecord auditRecord, HttpSession session) {
        PerUsers perUsers = (PerUsers) session.getAttribute("perUsers");
        //修改药品审核状态
        this.hqDrugMapper.updateIsva(hqDrug.getDrugId(), hqDrug.getIsva()+"");
        //审核表添加记录
        //添加审核人
        auditRecord.setAuditor(perUsers.getUserName());
        //添加业务id
        auditRecord.setBusinessId(hqDrug.getDrugId());
        return auditRecordMapper.insertSelective(auditRecord) > 0 ? ResponseMessage.success("审核成功") : ResponseMessage.error("审核失败");
    }


    /**
     * 查询小于库存预警的药品
     * @param hqDrugVo
     * @return
     */
    @Override
    public List<HqDrug> addPurchasePlan(HqDrugVo hqDrugVo) {
        return this.hqDrugMapper.addPurchasePlan(hqDrugVo);
    }


    /**
     * 查询小于库存预警药品的行数
     * @param hqDrugVo
     * @return
     */
    @Override
    public int addPurchasePlanCount(HqDrugVo hqDrugVo) {
        return this.hqDrugMapper.addPurchasePlanCount(hqDrugVo);
    }
}